
version 14
import excel using "~/Desktop/教师分组.xlsx", clear 
drop in 1
qui ds

local names=r(varlist)

gettoken v names: names

rename `v' 指导教师

gettoken v names: names

rename `v' 职称

gettoken v names: names

rename `v' 老师分组

keep 指导教师 职称 老师分组

save "~/Desktop/教师分组.dta",replace


import excel using "~/Desktop/学生名单.xlsx", clear 
drop in 1
qui ds

local names=r(varlist)

//gettoken v names: names

//rename `v' 序号

gettoken v names: names

rename `v' 学号

gettoken v names: names

rename `v' 姓名

gettoken v names: names

rename `v' 专业

gettoken v names: names

rename `v' 论文题目

gettoken v names: names

rename `v' 指导教师

merge m:1 指导教师 using "~/Desktop/教师分组.dta"
drop if _merge==2
drop _merge

gen name=指导教师


qui tostring 老师分组,replace
replace 老师分组="" if 老师分组=="."

qui gen 学生分组=""


tab 老师分组, nofreq

scalar ng=r(r)

scalar N=floor(_N/ng)

qui levelsof 老师分组, clean local(group)
foreach j of local group{

qui levelsof name if 老师分组==`"`j'"', clean local(exs)
qui cap drop rn
gen rn=uniform() if !strpos("`exs'",name) & missing(学生分组)

sort rn
replace 学生分组=`"`j'"' if _n<=N & 老师分组~=`"`j'"'

}

levelsof 姓名 if missing(学生分组), clean local(nm)

foreach v of local nm {
levelsof 老师分组 if 姓名=="`v'", clean local(exs)
qui cap drop rn
qui gen rn=uniform() if 老师分组!="`exs'"
sort rn
replace 学生分组=老师分组[1] if 姓名=="`v'"

}

sort 学生分组 老师分组

export excel 学号 姓名 专业 论文题目 指导教师 学生分组 using "~/Desktop/分组结果.xlsx", first(variables) replace
